package com.echo.im.engin.mq;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @author echo
 */
public class GenericTypeResolver {

    public static Class<?> getGenericTypeArgument(Class<?> clazz, int genericIndex) {
        // 获取父类的泛型类型
        Type genericSuperclass = clazz.getGenericSuperclass();

        // 确保父类是一个参数化类型
        if (genericSuperclass instanceof ParameterizedType) {
            ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;

            // 获取实际的类型参数列表
            Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();

            if (genericIndex < actualTypeArguments.length) {
                Type typeArgument = actualTypeArguments[genericIndex];

                // 如果这个类型参数本身也是一个参数化类型，例如 IMRouteInfo<PrivateMessageVO>
                if (typeArgument instanceof ParameterizedType) {
                    ParameterizedType parameterizedArgumentType = (ParameterizedType) typeArgument;

                    // 返回 IMRouteInfo<PrivateMessageVO> 中的泛型参数，即 PrivateMessageVO 的类型
                    return (Class<?>) parameterizedArgumentType.getActualTypeArguments()[0];
                } else if (typeArgument instanceof Class<?>) {
                    return (Class<?>) typeArgument;
                }
            }
        }

        return null; // 如果无法解析，则返回 null
    }
}
